//package com.tangsm.spring.boot.async.config;
//
//import org.springframework.aop.interceptor.AsyncExecutionAspectSupport;
//import org.springframework.context.annotation.Bean;
//import org.springframework.scheduling.annotation.EnableAsync;
//import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
//import org.springframework.stereotype.Component;
//
//import javax.annotation.Resource;
//import java.util.concurrent.Executor;
//
///**
// * Async配置自定义线程池（）
// *
// * <pre>
// * 由于AsyncConfigurer的默认线程池在源码中为空，Spring通过beanFactory.getBean(TaskExecutor.class)先查看是否有线程池，
// * 未配置时，通过beanFactory.getBean(DEFAULT_TASK_EXECUTOR_BEAN_NAME, Executor.class)，又查询是否存在默认名称为TaskExecutor的线程池。
// * 所以可在项目中，定义名称为TaskExecutor的bean生成一个默认线程池。也可不指定线程池的名称，申明一个线程池，本身底层是基于TaskExecutor.class便可。
// *
// * 比如：
// * Executor.class:ThreadPoolExecutorAdapter
// *   ->ThreadPoolExecutor
// *   ->AbstractExecutorService
// *   ->ExecutorService->Executor
// * （这样的模式，最终底层为Executor.class，在替换默认的线程池时，需设置默认的线程池名称为TaskExecutor）
// *
// * TaskExecutor.class:ThreadPoolTaskExecutor
// *   ->SchedulingTaskExecutor
// *   ->AsyncTaskExecutor
// *   ->TaskExecutor
// * （这样的模式，最终底层为TaskExecutor.class，在替换默认的线程池时，可不指定线程池名称。）
// * </pre>
// *
// * @author tangsm
// */
//@Component
//@EnableAsync
//public class AsyncConfigThree {
//    @Resource(name = "defaultTaskExecutor")
//    private ThreadPoolTaskExecutor defaultTaskExecutor;
//
//    /**
//     * 默认@Async异步线程池任务执行器
//     *
//     * <p>AsyncExecutionAspectSupport.DEFAULT_TASK_EXECUTOR_BEAN_NAME 指定 @Async异步线程池任务执行器</p>
//     *
//     * @return 异步线程池任务执行器
//     */
//    @Bean(name = AsyncExecutionAspectSupport.DEFAULT_TASK_EXECUTOR_BEAN_NAME)
//    public Executor taskExecutor() {
//        return defaultTaskExecutor;
//    }
//}
